package cn.edu.dgut.sai.database.jdbc;

import java.sql.*;

/**
 * @author Sai
 * Created by Sai on 2019-03-25.
 * <p>
 * <p>
 * <p>
 * JDBC编程步骤：
 * 0.加载数据库驱动程序
 * 1.连接到数据库
 * 2.创建SQL或MySQL语句
 * 3.在数据库中执行SQL或MySQL查询
 * 4.查看和修改记录
 * <p>
 * H2官方教程：
 * http://www.h2database.com/html/tutorial.html
 */
@SuppressWarnings({"Duplicates", "unused", "SqlNoDataSourceInspection", "SqlDialectInspection"})
public class DBUtil {

    //    MySql的URL
    //    private static final String URL="jdbc:mysql://localhost:3306/demo_jdbc";
    //    private static final String DRIVER = "com.mysql.jdbc.Driver";

    //  H2
    //  使用H2的本地嵌入式连接
    //  这个模式会与
    //  指定数据库文件：
    //      jdbc:h2:~/test
    //      jdbc:h2:file:/data/sample
    //      jdbc:h2:file:C:/data/sample (Windows only)
    //  如果数据库不存在，会在用户目录创建一个数据库文件，缺省用户是sa，密码是空字符串
    private static final String URL = "jdbc:h2:D://h2;MODE=MYSQL;DB_CLOSE_DELAY=-1";
    //  本地连接的内存模式，程序模式时，应用程序结束后，数据库就被清除。
    //private static final String URL_MEM = "jdbc:h2:mem:test;MODE=MYSQL;DB_CLOSE_DELAY=-1";

    // 使用H2的TCP连接模式
    // 使用服务器模式连接，必须先独立运行H2的数据库服务器,参考开发环境文档的H2章节；
    // java -jar h2*.jar
    // java -cp h2*.jar org.h2.tools.Server
    // 上面命令中的 -cp 参数，作用与 -classpath 一样，是指定类运行所依赖其他类的路径，即指定给解释器到哪里找到你的.class文件，通常是类库，jar包之类，需要全路径到jar包;
    // 如果有多个jar包，可以用分隔符分隔，window上分号“;”分隔，linux上是分号“:”分隔。不支持通配符，需要列出所有jar包，用一点“.”代表当前路径。
    private static final String URL_TCP = "jdbc:h2:tcp://localhost/~/test1;MODE=MYSQL;DB_CLOSE_DELAY=-1";
    // 内存模式
    private static final String URL_TCP_MEM = "jdbc:h2:tcp://localhost/mem:test1;MODE=MYSQL;DB_CLOSE_DELAY=-1";

    private static final String DRIVER = "org.h2.Driver";

    private static final String NAME = "sa";
    private static final String PASSWORD = "sa";

    // 新方法：提供数据库连接方法
    public static Connection getConnection(){
        try {
            return  DriverManager.getConnection(URL, NAME, PASSWORD);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {

        try (Connection conn = DriverManager.getConnection(URL, NAME, PASSWORD)) {

            Statement stmt = conn.createStatement();

            // 创建一个学生表
            stmt.executeUpdate(
                    "CREATE TABLE IF NOT EXISTS `student` (" +
                            "  `stuID` int(20)  NOT NULL ," +
                            "  `stuName` varchar(100) NOT NULL," +
                            "  `stuClass` varchar(20) NOT NULL," +
                            "  `stuGender` varchar(10) NOT NULL," +
                            "  `stuInfo` varchar(255) NOT NULL," +
                            "  primary key (stuID)"+
                            ");"
            );

            // 插入数据记录
            // id主键是自动生成
            stmt.executeUpdate(
                    "insert into `student` (stuID,stuName,stuClass,stuGender,stuInfo) values (1007,'没人做啊', '1班','这不关考啥的事，分工难啊','求老师别小组单位交作业了');"
            );
            ResultSet rs = stmt.executeQuery("select * from student");

            // 遍历每行记录
            while (rs.next()) {
                //如果结果集中有数据，就会循环打印出来
                System.out.println(rs.getInt("stuID") + "," + rs.getString("stuName"));
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
